草庐IT

Android JsonArray 和 JsonObject 反序列化

全部标签

java - Gson 使用 InstanceCreator 反序列化嵌套对象

我有一个名为PageItem的类,它有一个以Context作为参数的构造函数:PageItem(Contextcontext){super(context);this.context=context;}PageItem具有以下属性:privateintid;privateStringTitle;privateStringDescription;publicNewsprovidernewsprovider;publicTopictopic;Newsprovider和Topic是我的应用程序的其他类,它们具有以下构造函数:Newsprovider(Contextcontext){super

java - lambda 创建后的序列化

我可以serializealambda使用以下语法:Runnabler=(Runnable&Serializable)()->System.out.println("");try(ObjectOutputoo=newObjectOutputStream(newByteArrayOutputStream())){oo.writeObject(r);}但是,如果我从客户端代码接收到lambda并且没有正确转换,我就无法序列化它。如何在不更改其定义的情况下序列化下面的r:Runnabler=()->System.out.println("");我试图序列化一个“派生”对象:Runnabler

java - 序列化/反序列化如何破坏不变性?

我在一次采访中被问到这个问题。面试官想知道如何使对象不可变。然后他问如果我序列化这个对象会怎样——它会破坏不变性吗?如果是,我该如何预防?任何人都可以帮助我理解这一点吗? 最佳答案 不可变对象(immutable对象)是指一旦创建就无法更改的对象。您可以使用private访问修饰符和final关键字来创建这样的对象。如果一个不可变对象(immutable对象)被序列化,它的原始字节可以被修改,以便在反序列化时对象不再相同。这无法完全避免。不过,加密、校验和和CRC将有助于防止这种情况发生。

java - 如何找出序列化 Java 对象的 serialVersionUID?

我有几个未指定serialVersionUID的可序列化类。我现在需要向这些类添加一些数据成员,但希望保留一些已经序列化的对象。有没有办法找出这些序列化对象的serialVersionUID,以便我可以在源代码中指定相同的ID? 最佳答案 如果您还没有修改代码,您可能可以运行serialver工具(JDK的一部分)并查看它生成的内容。我相信这会让您知道计算出的seriVersionUID是什么。Hereisabriefarticleonserialver. 关于java-如何找出序列化J

java - 将字段标记为 transient 如何使序列化对象成为可能

publicclassFooimplementsjava.io.Serializable{privateintv1;privatestaticdoublev2;privateLoanv3=newLoan();}选项:A.Foo的实例可以序列化,因为Foo实现了Serializable。B.无法序列化Foo的实例,因为Foo包含一个不可序列化的实例变量v3。C.如果将v3标记为transient,则Foo的实例是可序列化的。D.b和c答案:D说明:一个对象可能不会被序列化,即使它的类实现了java.io.Serializable,因为它可能包含不可序列化的实例变量。现在我的问题是:据我所

java - 用 jackson 反序列化 List<Interface>

我想将json反序列化为Foo类:classFoo{Listbars;}interfaceIBar{...}classBarimplementsIBar{...}IBar有两个实现,但是在反序列化时我总是想使用第一个实现。(理想情况下,这应该使问题更容易,因为不需要运行时类型检查)我确信我可以编写自定义反序列化器,但我觉得一定有更简单的方法。我找到了这个注释,它在没有列表的情况下工作得很好。@JsonDeserialize(as=Bar.class)IBarbar;Listbars;//Don'tknowhowtousetheannotationhere.

java - Spark 和不可序列化的 DateTimeFormatter

我正在尝试在Spark中使用java.time.format中的DateTimeFormatter,但它似乎不可序列化。这是相关的代码块:valpattern="".rvaldtFormatter=DateTimeFormatter.ofPattern("")vallogs=sc.wholeTextFiles(path)valentries=logs.flatMap(fileContent=>{valfile=fileContent._1valcontent=fileContent._2content.split("\\r?\\n").map(line=>linematch{casep

java - 强制 jackson 反序列化为特定的原始类型

我正在使用Jackson1.8.3将以下域对象序列化和反序列化为JSONpublicclassNode{privateStringkey;privateObjectvalue;privateListchildren=newArrayList();/*gettersandsettersomittedforbrevity*/}然后使用以下代码序列化和反序列化对象ObjectMappermapper=newObjectMapper();mapper.writeValue(destination,rootNode);然后反序列化mapper.readValue(destination,Node

java -- 缓冲流、转换流、序列化流

缓冲流缓冲流,也叫高效流,按照数据类型分类:字节缓冲流:BufferedInputStream,BufferedOutputStream字符缓冲流:BufferedReader,BufferedWriter缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率。字节缓冲流//构造方法publicBufferedInputStream(InputStreamin)//创建一个新的缓冲输入流publicBufferedOutputStream(OutputStreamout)//创建一个新的缓冲输出流。//字节输出缓冲流Out

java - 如果存在特定字段,是否可以使用 Jackson 多态反序列化来序列化为子类型?

使用旋转动物园示例:publicclassZooPen{publicStringtype;publicListanimals;}publicclassAnimal{publicStringname;publicintage;}publicclassBirdextendsAnimal{publicdoublewingspan;}如果未指定翼展,我想使用多态反序列化构造Animal实例,如果指定翼展,则构造Bird实例。在Jackson中,非类型化反序列化通常看起来像这样:@JsonTypeInfo(use=JsonTypeInfo.Id.NAME,include=JsonTypeInfo